#
# (C) Copyright 2007 Semihalf
#
# SPDX-License-Identifier:	GPL-2.0+
#

ifeq ($(ARCH),powerpc)
LOAD_ADDR = 0x40000
endif
ifeq ($(ARCH),arm)
LOAD_ADDR = 0x1000000
endif
ifeq ($(ARCH),mips)
ifeq ($(CPU),octeon)
# for OCTEON a virtual address is used
LOAD_ADDR = 0xd0000000
AFLAGS := $(subst $(CONFIG_SYS_TEXT_BASE),$(CONFIG_STANDALONE_LOAD_ADDR),$(AFLAGS))
CFLAGS := $(subst $(CONFIG_SYS_TEXT_BASE),$(CONFIG_STANDALONE_LOAD_ADDR),$(CFLAGS))
CPPFLAGS := $(subst $(CONFIG_SYS_TEXT_BASE),$(CONFIG_STANDALONE_LOAD_ADDR),$(CPPFLAGS))
LDFLAGS := -m elf32btsmipn32 -e _start -T mips-octeon.lds
else
LOAD_ADDR = 0x80400000
endif
else
endif

LDFLAGS += -Ttext $(LOAD_ADDR)

include $(TOPDIR)/config.mk

# Resulting ELF and binary exectuables will be named demo and demo.bin
OUTPUT-$(CONFIG_API) = $(obj)demo
OUTPUT = $(OUTPUT-y)
ifneq ($(OUTPUT),"")
BIN = $(OUTPUT).bin
endif

# Source files located in the examples/api directory
SOBJ_FILES-$(CONFIG_API) += crt0.o
COBJ_FILES-$(CONFIG_API) += demo.o
COBJ_FILES-$(CONFIG_API) += glue.o
COBJ_FILES-$(CONFIG_API) += libgenwrap.o
ifeq ($(ARCH),mips)
ifeq ($(CPU),octeon)
COBJ_FILES-$(CONFIG_OCTEON) += octeon.o
endif
endif

# Source files which exist outside the examples/api directory
EXT_COBJ_FILES-$(CONFIG_API) += lib/crc32.o
EXT_COBJ_FILES-$(CONFIG_API) += lib/ctype.o
EXT_COBJ_FILES-$(CONFIG_API) += lib/div64.o
EXT_COBJ_FILES-$(CONFIG_API) += lib/string.o
EXT_COBJ_FILES-$(CONFIG_API) += lib/time.o
EXT_COBJ_FILES-$(CONFIG_API) += lib/vsprintf.o
ifeq ($(ARCH),powerpc)
EXT_SOBJ_FILES-$(CONFIG_API) += arch/powerpc/lib/ppcstring.o
endif

# Create a list of source files so their dependencies can be auto-generated
SRCS	+= $(addprefix $(SRCTREE)/,$(EXT_COBJ_FILES-y:.o=.c))
SRCS	+= $(addprefix $(SRCTREE)/,$(EXT_SOBJ_FILES-y:.o=.S))
SRCS	+= $(addprefix $(SRCTREE)/examples/api/,$(COBJ_FILES-y:.o=.c))
SRCS	+= $(addprefix $(SRCTREE)/examples/api/,$(SOBJ_FILES-y:.o=.S))

# Create a list of object files to be compiled
OBJS	+= $(addprefix $(obj),$(SOBJ_FILES-y))
OBJS	+= $(addprefix $(obj),$(COBJ_FILES-y))
OBJS	+= $(addprefix $(obj),$(notdir $(EXT_COBJ_FILES-y)))
OBJS	+= $(addprefix $(obj),$(notdir $(EXT_SOBJ_FILES-y)))

CPPFLAGS += -I..

ifndef CONFIG_API
all:
else
all:	$(obj).depend $(OUTPUT) $(BIN)

#########################################################################

$(BIN):		$(OUTPUT)
		$(OBJCOPY) -O binary $(OUTPUT) $@
		@echo "CFLAGS:" "$(CFLAGS)"
		#2>/dev/null

$(OUTPUT):	$(OBJS)
		$(LD) $(LDFLAGS) -o $@ $^ $(PLATFORM_LIBS) -Map $(OUTPUT).map


# Rule to build generic library C files
$(obj)%.o: $(SRCTREE)/lib/%.c
	@echo "CFLAGS:" "$(CFLAGS)"
	$(CC) -g $(CFLAGS) -c -o $@ $<

# Rule to build architecture-specific library assembly files
$(obj)%.o: $(SRCTREE)/arch/$(ARCH)/lib/%.S
	@echo "CFLAGS:" "$(CFLAGS)"
	$(CC) -g $(CFLAGS) -c -o $@ $<
endif

#########################################################################

# defines $(obj).depend target
include $(SRCTREE)/rules.mk

sinclude $(obj).depend

#########################################################################
